// 最大子矩阵和 - dp详解
// 题解 https://blog.csdn.net/m0_37579232/article/details/89195533
// 2019-04-10 21:48:15 发布 1282：最大子矩阵
// 已知矩阵的大小定义为矩阵中所有元素的和。给定一个矩阵，你的任务是找到最大的非空(大小至少是1
// × 1)子矩阵。 比如，如下4 × 4的矩阵 0  -2 -7  0 9  2 -6  2 -4  1 -4  1 -1  8
// 0 -2 的最大子矩阵是
//  9 2
// -4 1
// -1 8
// 这个子矩阵的大小是15。
// 输入是一个N×N的矩阵。输入的第一行给出N(0<N≤100)。再后面的若干行中，依次(首先从左到右给出第一行的N个整数，
// 再从左到右给出第二行的N个整数……)给出矩阵中的N2个整数，整数之间由空白字符分隔(空格或者空行)。已知矩阵中整数的范围都在[−127,127]。
// 输出最大子矩阵的大小。
// 输入 4
// 0 -2 -7  0
// 9  2 -6  2
// -4  1 -4  1
// -1  8  0 -2
// 输出 15
// 思路：我们都知道在一维情况下求最大连续子序列和的操作：
// for(int i=1;i<=n;i++){
//     dp[i]=max(a[i],dp[i-1]+a[i]);
// }
// 那么该怎么推广到二维情况下呢：比如样例
// 0 -2 -7 0
// 9 2 -6 2
// -4 1 -4 1
// -1 8 0 -2
// 步骤：（1）求矩阵大小是1*k（k=1,2,3,4）
// 可以发现就是求每行的最大连续子序和
// 0 -2 -7 0  （ans=0,矩阵为[0]）
// 9 2 -6 2  （ans=11,矩阵为[9 2]）
// ……
// （2）求矩阵大小是2*k（k=1,2,3,4）
// 这时我们可以在第1,2行或2,3行或3,4行找最大矩阵,对于矩阵：
// 0 -2 -7 0
// 9 2 -6 2
// 来说，最大矩阵是[0 9]。
// 因为我们取的是矩阵，肯定是竖着一列都取的，不可能这一列取到第i个元素，
// 上一列取到第i-1个元素，这样我们就可以把要求的两行，两两加起来
// 9 0 -13 2
// 这样求出的最大连续子序和是9，这个结果也就是这个矩阵对应的最大矩阵和。
// 同理把
// 9 2 -6 2
// -4 1 -4 1
// 和
// -4 1 -4 1
// -1 8 0 -2
// 也分别加起来，三种情况下求出的最大值，就是2*k大小矩阵的最大值
// （3）同理，我们求3*k，4*k
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <string>
using namespace std;
#define ll long long
#define lson l, m, rt << 1
#define rson m + 1, r, rt << 1 | 1
typedef pair<int, int> P;
const int INF = 0x3f3f3f3f;
const int N = 115;
int a[N][N], b[N][N], dp[N];
int mx = 0, n;
void solve(int j) {
  memset(dp, 0, sizeof(dp));
  for (int i = 1; i <= n; i++) {
    dp[i] = max(b[j][i], dp[i - 1] + b[j][i]);
    mx = max(mx, dp[i]);
  }
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) {
      scanf("%d", &a[i][j]);
    }
  }
  for (int i = 1; i <= n; i++) {  //从第i行开始加
    memset(b, 0, sizeof(b));
    for (int j = i; j <= n; j++) {    //加到第j行
      for (int k = 1; k <= n; k++) {  //第j行各个列的值
        b[j][k] = a[j][k] + b[j - 1][k];
      }
      solve(j);
    }
  }
  printf("%d\n", mx);
}
